/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sysdrive.DAO;

import br.com.sysdrive.model.Produto;
import br.com.sysdrive.model.Venda;
import br.com.sysdrive.model.VendaProduto;
import br.com.sysdrive.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Willian Frias
 */
public class VendaProdutoDAOImpl {
    
private Connection conn;

    public VendaProdutoDAOImpl() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    public void cadastrar(VendaProduto vendaProduto) {
        PreparedStatement stmt = null;
        String sql = "insert into venda_produto (qtd_venda_produto, id_venda, id_produto) values (?,?,?);";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setDouble(1, vendaProduto.getQtdVendaProduto());
            stmt.setInt(2, vendaProduto.getVenda().getIdVenda());
            stmt.setInt(3, vendaProduto.getProduto().getIdProduto());
            stmt.execute();
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao cadastrar VendaProduto! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } catch (Exception ex) {
            System.out.println("Problemas ao cadastrar VendaProduto! Erro VendaProdutoDAO: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Ero: " + ex.getMessage());
            }
        }
    }
       public List<Object> listar() {   
        List<Object> resultado = new ArrayList<Object>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String sql = "select v.* "
                + "from venda_produto v;";
        try {
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            while (rs.next()) {
                VendaProduto vendaProduto = new VendaProduto();
                vendaProduto.setIdVendaProduto(rs.getInt("id_venda_produto"));
                vendaProduto.setQtdVendaProduto(rs.getDouble("qtd_venda_produto"));
                resultado.add(vendaProduto);
            }
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao listar VendaProduto! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro VendaProdutoDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return resultado;
    }

    public Object carregar(int idObject) {
     PreparedStatement stmt = null;
        VendaProduto vendaProduto = null;
        ResultSet rs = null;
        String sql = "select v.id_venda_produto, v.qtd_venda_produto, "
                + "from venda_produto v where v.id_venda_produto = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idObject);
            rs = stmt.executeQuery();
            while (rs.next()) {
                vendaProduto = new VendaProduto();
                vendaProduto.setIdVendaProduto(rs.getInt("id_venda_produto"));
                vendaProduto.setQtdVendaProduto(rs.getDouble("qtd_venda_produto"));

                Venda venda = new Venda();
                venda.setIdVenda(rs.getInt("id_venda"));
                
                Produto produto =  new Produto();
                produto.setIdProduto(rs.getInt("id_produto"));

                vendaProduto.setVenda(venda);
                vendaProduto.setProduto(produto);
            }
            return vendaProduto;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao Carregar VendaProduto! Erro VendaProdutoDAO: " + ex.getMessage());
            ex.printStackTrace();
            return null;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão Carregar VendaProduto! Erro VendaProdutoDAO: " + ex.getMessage());
                ex.printStackTrace();
            
            }
    }

}
        public Boolean alterar(Object object) {
        PreparedStatement stmt = null;
        VendaProduto vendaProduto = (VendaProduto) object;
        String sql = "update venda_produto set  qtd_venda_produto = ?, id_venda = ?, id_produto = ?"
                + " where id_venda_produto = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setDouble(1, vendaProduto.getQtdVendaProduto());
            stmt.setInt(2, vendaProduto.getVenda().getIdVenda());
            stmt.setInt(3, vendaProduto.getProduto().getIdProduto());
            stmt.setInt(4, vendaProduto.getIdVendaProduto());
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao alterar VendaProduto! Erro VendaProdutoDAO: " + ex.getMessage());
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parâmetros de conexão Alterar VendaProduto! Erro VendaProdutoDAO: " + ex.getMessage());
            }
        }
    }
}


